#!/bin/bash
#===============================================================================
# OpenMPI 性能优化配置脚本 - 针对鲲鹏920多NUMA架构（16 NUMA节点）
# 用途：优化集合通信性能，减少跨NUMA开销
#===============================================================================

#-------------------------------------------------------------------------------
# 集合通信算法配置
#-------------------------------------------------------------------------------
export OMPI_MCA_coll_hcoll_enable=0                    # 禁用hcoll（层次化集合通信库），可能不适配鲲鹏
export OMPI_MCA_coll_sm_priority=100                   # 提高共享内存集合通信优先级（同NUMA内优先用共享内存）
export OMPI_MCA_coll_tuned_use_dynamic_rules=1         # 启用动态规则，根据消息大小自动选择算法

#-------------------------------------------------------------------------------
# Broadcast 优化：算法6=环形，适合大规模多节点
#-------------------------------------------------------------------------------
export OMPI_MCA_coll_tuned_bcast_algorithm=6           # 环形算法：所有进程形成环，避免根节点瓶颈
export OMPI_MCA_coll_tuned_bcast_segment_size=65536    # 64KB分段：大消息分段传输，流水线执行

#-------------------------------------------------------------------------------
# Allreduce 优化：算法5=分段环形，兼顾带宽和延迟
#-------------------------------------------------------------------------------
export OMPI_MCA_coll_tuned_allreduce_algorithm=5       # 分段环形：Reduce-scatter + Allgather，适合多NUMA
export OMPI_MCA_coll_tuned_allreduce_segment_size=65536 # 64KB分段：流水线传输，隐藏延迟

#-------------------------------------------------------------------------------
# 轮询策略：减少上下文切换
#-------------------------------------------------------------------------------
export OMPI_MCA_mpi_yield_when_idle=0                  # 不让出CPU，持续轮询（低延迟但占用CPU）
export OMPI_MCA_mpi_leave_pinned=1                     # 保持内存页锁定，避免重复pin/unpin开销

#-------------------------------------------------------------------------------
# 共享内存传输优化：增大缓冲区，减少小消息开销
#-------------------------------------------------------------------------------
export OMPI_MCA_btl_sm_eager_limit=65536               # Eager协议上限=64KB（小于此直接发送，无需握手）
export OMPI_MCA_btl_sm_max_send_size=262144            # 共享内存单次传输上限=256KB
export OMPI_MCA_hwloc_base_binding_policy=numa         # 进程绑定到NUMA节点（减少跨NUMA访问）